package com.gtw.decorator;

/**
 * 动态给对象添加一些职责,此模式比生成子类更灵活(自我想象子类继承父类,子类再继承子类,职责更多则一层一层继承下去)
 * 优点:
 *      1.装饰类Decorator和被装饰类ConcreteComponent可以独立发展,不会互相耦合(Decorator引用的是Component)
 *      2.装饰模式是继承模式的一个代替方案,Decorator不管装饰多少层,返回的都是Component
 *      3.可以动态的扩展一个实现类的功能
 * 缺点:
 *      多层装饰是比较复杂的,尤其是最里面装饰出了问题
 * 使用场景:
 *      需要扩展一个类的功能,可以动态添加撤销功能
 */
public abstract class Decorator extends Component {
    /**
     * 它的属性里必然有一个private变量指向Component抽象构件
     */
    private Component component;

    public Decorator(Component component) {
        this.component = component;
    }

    @Override
    public void operate() {
        component.operate();
    }
}
